home *** CD-ROM | disk | FTP | other *** search
- /* GadTools layout toolkit
- **
- ** Copyright © 1993-1995 by Olaf `Olsen' Barthel
- ** Freely distributable.
- */
-
- #include "gtlayout_global.h"
-
- VOID __regargs
- LTP_HandleHistory(struct SGWork *Work)
- {
- ObjectNode *Node;
-
- if(GETOBJECT(Work -> Gadget,Node))
- {
- if(Node -> Special . String . HistoryHook)
- {
- struct Node *Choice = NULL;
- struct MinList *List = Node -> Special . String . HistoryHook -> h_Data;
-
- if(Work -> IEvent -> ie_Qualifier & QUALIFIER_SHIFT)
- {
- if(Work -> IEvent -> ie_Code == CURSORUP)
- {
- if(List -> mlh_Head -> mln_Succ)
- Choice = (struct Node *)List -> mlh_Head;
- }
- else
- {
- if(List -> mlh_Head -> mln_Succ)
- Choice = (struct Node *)List -> mlh_TailPred;
- }
- }
- else
- {
- struct Node *Current = Node -> Special . String . CurrentNode;
-
- if(Work -> IEvent -> ie_Code == CURSORUP)
- {
- if(Current)
- {
- if(Current -> ln_Pred -> ln_Pred)
- Choice = Current -> ln_Pred;
- else
- Choice = Current;
- }
- else
- {
- if(List -> mlh_Head -> mln_Succ)
- Choice = (struct Node *)List -> mlh_TailPred;
- }
- }
- else
- {
- if(Current)
- {
- if(Current -> ln_Succ -> ln_Succ)
- Choice = Current -> ln_Succ;
- }
- }
- }
-
- if(Choice != Node -> Special . String . CurrentNode)
- {
- if(Choice)
- {
- strcpy(Work -> WorkBuffer,Choice -> ln_Name);
-
- Work -> NumChars = Work -> BufferPos = strlen(Work -> WorkBuffer);
- }
- else
- {
- Work -> WorkBuffer[0] = 0;
- Work -> NumChars = 0;
- Work -> BufferPos = 0;
- }
-
- if(Node -> Type == INTEGER_KIND)
- {
- #ifdef DO_HEXHOOK
- LTP_ConvertNum((Node -> Min < 0),Work -> WorkBuffer,&Work -> LongInt);
- #else
- Work -> LongInt = LTP_Atol(Work -> WorkBuffer);
- #endif
- }
-
- Node -> Special . String . CurrentNode = Choice;
-
- Work -> Actions = (Work -> Actions & ~SGA_BEEP) | SGA_USE | SGA_REDISPLAY;
- }
- }
- }
- }
-